#include <stdio.h>
#include <string.h>
#include <iostream>
#include <fstream>
#include <unordered_map>
#include "test.h"
using namespace std;


/** @file delComment.cc
 * 这是一个测试Cpp文件
 */


























//! 一个Qt风格的测试文档.
/*!
  更详尽的类注释.
*/

class QTstyle_Test
{
public:
    //! 一个枚举.
    /*! 更详尽的类注释. */
    enum TEnum
    {
        TVal1, /*!< 枚举值 1. */
        TVal2, /*!< 枚举值 2. */
        TVal3  /*!< 枚举值 3. */
    }
        //! 枚举指针.
        /*! 详细描述. */
        * enumPtr,
        //! 枚举变量.
        /*! 详细描述. */
        enumVar;

    //! 一个构造函数.
    /*!
      更详尽的构造函数注释.
    */
    QTstyle_Test();

    //! 一个析构函数.
    /*!
      更详尽的析造函数注释.
    */
    ~QTstyle_Test();

    //! 一个普通成员，含有两个参数，返回一个整形.
    /*!
      \param a 一个整形参数.
      \param s 一个const属性的char指针.
      \return 返回值
      \sa QTstyle_Test(), ~QTstyle_Test(), testMeToo() and publicVar()
    */
    int testMe(int a, const char *s);

    //! 一个纯虚函数.
    /*!
      \sa testMe()
      \param c1 第一个变量.
      \param c2 第二个变量.
    */
    virtual void testMeToo(char c1, char c2) = 0;

    //! 一个公有成员.
    /*!
      更多细节.
    */
    int publicVar;

    //! 一个成员函数指针.
    /*!
      更多细节.
    */
    int (*handler)(int a, int b);
};

















































/*! 一个测试类 */

class Afterdoc_Test
{
public:
    /**一个枚举类型. 
     *  注释块也可以放在枚举块后面! 
     */
    enum EnumType
    {
        int EVal1, /**< 枚举值 1 */
        int EVal2  /**< 枚举值 2 */
    };
    void member(); //!< 一个成员函数.

protected:
    int value; /*!< 一个变量值 */
};
/**
 * @brief  成员注释测试函数2
 * @note   无注意事项
 * @param  t1: 
 * @param  *t2: 
 * @retval 
 */
int testFunc2(int t1, int *t2 /**< [out] 输出参数 t2. */)
{
    int t3 = 3; /*!< 参数3 */
    int t4 = 4; /**< 参数4 */
    int t5 = 5; //!< 参数5
                //!< 多加一行
    int t6 = 6; ///< 参数6
                ///< 另一种多加一行的方式
    int t7 = 7; //!< 参数7
    int t8 = 8; ///< 参数8
    *t2 = t5 + t6 + t7 + t8;
    return t1 + *t2 + t3 + t4;
}

/**
 * @brief  成员注释测试函数
 * @note   
 * @param  t1: 参数1
 * @param  *t2: 参数2
 * @retval 
 */
int testFunc(int t1, int *t2 /**< [out] 输出参数 t2. */)
{
    int t3 = 3; /*!< 参数3 */
    int t4 = 4; /**< 参数4 */
    int t5 = 5; //!< 参数5
                //!< 多加一行
    int t6 = 6; ///< 参数6
                ///< 另一种多加一行的方式
    int t7 = 7; //!< 参数7
    int t8 = 8; ///< 参数8
    *t2 = t5 + t6 + t7 + t8;
    testFunc2(t1,&t2);
    return t1 + *t2 + t3 + t4;
}

/**
 * @brief  主函数
 * @note   
 * @retval 
 */
int main()
{
    ifstream doxin("DoxyfileEvent");
    ofstream doxout("2");
    string sline;
    while (getline(doxin, sline))
    {
        if (sline.size() <= 1 || sline[0] == '#')
        {
            ; //doxout << string(sline.begin() + 1, sline.end());
        }
        else
        {
            doxout << sline << endl;
        }
    }
    int out = 2;
    testFunc(1,&out);
    return 0;
}